package my.object.clone;

import java.util.HashMap;
import java.util.Map;

/**
 * 不建议使用 Cloneable 拷贝对象
 * 可以使用 构造方法拷贝 和 静态工厂拷贝
 */
public class Clone implements Cloneable {

    /**
     * Object clone 是受保护的，如果一个类没有实现Cloneable 却调用了clone那么会抛出CloneNotSupportedException异常
     * @return
     * @throws CloneNotSupportedException
     */


    public Map<String,String> map = new HashMap<>();

    public Clone(){
        System.out.println("clone 被创建了");
    }

    /**
     * object 类中的 clone方法为protected 的，如果不覆盖那么 无法使用
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    public Clone clone() throws CloneNotSupportedException {
        Clone clone = (Clone) super.clone(); //此处只是浅克隆，数组合引用类型都不能正确赋值，只是初始化了一下。
        for(Map.Entry<String, String> entry : map.entrySet()){
            //此处调用子类可能已经有了 累加的行为了，所以可能造成不一致问题
            clone.put(entry.getKey(),entry.getValue());
        }
        return clone;
    }

    public String put(String key,String value) {
        return map.put(key," clone : "+value);
    }



}
